package com.audaque.springboot.foshanupload.reactor.webfluxdemo.router;

import com.audaque.springboot.foshanupload.reactor.webfluxdemo.handler.MusicDetailHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.server.RequestPredicates;
import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.RouterFunctions;
import org.springframework.web.reactive.function.server.ServerResponse;

/**
 * WebFlux 路由配置
 *
 * @version v1.0
 * @author: fengjinsong
 * @date: 2022年06月07日 21时03分
 */
@Slf4j
@Configuration
public class MusicDetailRouterConfiguration {
    @Bean
    public RouterFunction<ServerResponse> musicDetailRouterMapper(MusicDetailHandler handler) {
        log.debug("注册路由...");

        // 这里在写完整后，可以考虑使用 import static 来简化代码；虽然牺牲了一部分可读性，但是一些无用代码确实能大面积减少
        return RouterFunctions
                // 全路径
                .nest(RequestPredicates.path("/webfluxdemo/musicDetail"),
                        //二级路径
                        RouterFunctions.route(RequestPredicates.GET("/getMusic")
                                .and(RequestPredicates.accept(MediaType.APPLICATION_JSON)),
                                handler::getMusic)
                        // 追加其他路由
                        //.andRoute(??)
                );
    }



}
